/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package myjme.tin.core;

import com.jme3.math.Vector3f;
import java.util.ArrayList;
import java.util.Random;

/**
 *
 * @author Administrator
 */
public class TinController {
    private Tin tin=new Tin();
    
    ArrayList<Vector3f> allVec=new ArrayList<Vector3f>();
    
    ArrayList<Vector3f> layer1=new ArrayList<Vector3f>();
    ArrayList<Vector3f> layer2=new ArrayList<Vector3f>();
    ArrayList<Vector3f> layer3=new ArrayList<Vector3f>();
    ArrayList<Vector3f> layer4=new ArrayList<Vector3f>();
    ArrayList<Vector3f> layer5=new ArrayList<Vector3f>();
    
    public TinController(){
        for (int i = 0; i < 100; i++) {
            Random r=new Random();
            float x=r.nextInt(300);
            float y=r.nextInt(300);
            float z=r.nextInt(300);
            Vector3f v=new Vector3f(x, y, z);
            
            allVec.add(v);
            
        }
    }
    
    public boolean execute(){
        //制定规则
        
        return true;
    }
//    /**
//     *第一种情况是在三角形内
//     *第二种情况是在外接圆内
//     *第三种情况是在外接圆上
//     *第四种情况是在外接圆外
//     */
//    public boolean conditionOne(){
//        return true;
//    }
//    
//    public boolean conditionTwo(){
//        return true;
//    }
//    
//    public boolean conditionThree(){
//        return true;
//    }
//    
//    public boolean conditionFour(){
//        return true;
//    }
    /**
     * 本程序采用凸闭包算法，由外向里
     * 分为5层，以后在调节看是否合理
     * 每层链接不能越界
     * 层位由外到内是1-5
     */
    public boolean splitToLayers(ArrayList<Vector3f> al){
        
        float xmin=0,xmax=0,ymin=0,ymax=0;
        
        for (int i = 0; i < al.size(); i++) {
            Vector3f v=al.get(i);
            if (i==0) {
                xmin=v.x;
                xmax=v.x;
                ymin=v.y;
                ymax=v.y;
            }
            
            
            if (xmin>v.x) {
                xmin=v.x;
            }
            if (xmax<v.x) {
                xmax=v.x;
            }
            if (ymin>v.y) {
                ymin=v.y;
            }
            if (ymax<v.y) {
                ymax=v.y;
            }
        }
        //筛选出第一层，rangexminleft    RANGEYMINUP
        //下面那个乘以倍数的不对
        float ysplit=(ymax-ymin)/10;
        float xsplit=(xmax-xmin)/10;
        
        
        float RXMINL=xmin,RXMINR=xmin+xsplit;
        float RXMAXL=xmax-xsplit,RXMAXR=xmax;
        float RYMINDOWN=ymin,RYMINUP=ymin+ysplit;
        float RYMAXDOWN=ymax-ysplit,RYMAXUP=ymax;
        //第二层
        float RXMINL1=xmin+xsplit,RXMINR1=xmin+2*xsplit;
        float RXMAXL1=xmax-2*xsplit,RXMAXR1=xmax-xsplit;
        float RYMINDOWN1=ymin+ysplit,RYMINUP1=ymin+2*ysplit;
        float RYMAXDOWN1=ymax-2*ysplit,RYMAXUP1=ymax-ysplit;
        //第三层
        float RXMINL2=xmin+2*xsplit,RXMINR2=xmin+3*xsplit;
        float RXMAXL2=xmax-3*xsplit,RXMAXR2=xmax-2*xsplit;
        float RYMINDOWN2=ymin+2*ysplit,RYMINUP2=ymin+3*ysplit;
        float RYMAXDOWN2=ymax-3*ysplit,RYMAXUP2=ymax-2*ysplit;
        //第四层
        float RXMINL3=xmin+3*xsplit,RXMINR3=xmin+4*xsplit;
        float RXMAXL3=xmax-4*xsplit,RXMAXR3=xmax-3*xsplit;
        float RYMINDOWN3=ymin+3*ysplit,RYMINUP3=ymin+4*ysplit;
        float RYMAXDOWN3=ymax-4*ysplit,RYMAXUP3=ymax-3*ysplit;
        //第五层
        float RXMINL4=xmin+4*xsplit,RXMINR4=xmin+5*xsplit;
        float RXMAXL4=xmax-5*xsplit,RXMAXR4=xmax-4*xsplit;
        float RYMINDOWN4=ymin+4*ysplit,RYMINUP4=ymin+5*ysplit;
        float RYMAXDOWN4=ymax-5*ysplit,RYMAXUP4=ymax-4*ysplit;
        
        for (int i = 0; i < al.size(); i++) {
            Vector3f v=al.get(i);
            
            if (((v.x>=RXMINL&&v.x<RXMINR)||(v.x>RXMAXL&&v.x<=RXMAXR))&&((v.y>=RYMINDOWN&&v.y<RYMINUP)||(v.y>RYMAXDOWN&&v.y<=RYMAXUP))) {
                layer1.add(v);
            }else if (((v.x>=RXMINL1&&v.x<RXMINR1)||(v.x>RXMAXL1&&v.x<=RXMAXR1))&&((v.y>=RYMINDOWN1&&v.y<RYMINUP1)||(v.y>RYMAXDOWN1&&v.y<=RYMAXUP1))) {
                layer2.add(v);
            }else if (((v.x>=RXMINL2&&v.x<RXMINR2)||(v.x>RXMAXL2&&v.x<=RXMAXR2))&&((v.y>=RYMINDOWN2&&v.y<RYMINUP2)||(v.y>RYMAXDOWN2&&v.y<=RYMAXUP2))) {
                layer3.add(v);
            }else if (((v.x>=RXMINL3&&v.x<RXMINR3)||(v.x>RXMAXL3&&v.x<=RXMAXR3))&&((v.y>=RYMINDOWN3&&v.y<RYMINUP3)||(v.y>RYMAXDOWN3&&v.y<=RYMAXUP3))) {
                layer4.add(v);
            }else{
                layer5.add(v);
            }
        }
        
        return true;
    }
    /**
     *下面这个是排序算法，将所有的生成一个圈 
     * 
     * 
     */
    
}
